package Song.Han.Demo02;

import java.util.ArrayList;
import java.util.Iterator;

public class Demo01Generic {

    public static void main(String[] args) {
        //show01();
        show02();
    }

    /*
     * 创建集合对象使用泛型
     * 好处：
     *   1.避免了类型转换的异常
     *   2.把运行期异常，提升到了编译期
     * 弊端：
     *   存储类型单一
     */
    private static void show02() {
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        //list.add(1);//报错

        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            String s = it.next();
            System.out.println(s+"->"+s.length());
        }

    }

    /*
        不使用泛型创建集合对象
        好处：
            默认类型是Object，可以存储任意类型的数据
        坏处：
            不安全，会引发异常
    */
    private static void show01() {
        ArrayList list = new ArrayList();
        list.add("aaa");
        list.add(1);

        Iterator it = list.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            System.out.println(obj);

            //想要使用String类特有方法，length长度。但不能使用（多态），需要向下转型
            //会抛出异常 ClassCastException ，不能把Integer类型转换为String类型
            String s = (String) obj;
            System.out.println(s.length());
        }
    }
}
